<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        /*
          1、反射API与对象API
             1)反射API并不限于捕获处理程序
             2)大多数反射API的方法在Object类型上有对应的方法
             3)Object上的方法适用于通用程序，而反射方法适用于细粒度的对象控制与操作
        */

        /*
          2、状态标记
             返回"状态标记"的Boolean值，表示意图执行的操作是否成功, 有的时候比抛出错误更有效
        */
       // 初始代码
       const obj = {}
       try {
        Object.defineProperty(obj, 'foo', 'bar')
        console.log('success')
       } catch(e) {
        console.log('failure')  // failure
       }

       // 对以上代码重构
       // Reflect.defineProperty返回Boolean值
       const obj2 = {}
       const res = Reflect.defineProperty(obj2, 'foo', {value: 'bar'})
       if(res) {
        console.log('success')
       } else {
        console.log('fail')
       }

    </script>
</body>
</html>